package com.proyecto.core.vista.echo.componentes;

import java.util.ArrayList;
import java.util.ResourceBundle;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.layout.SplitPaneLayoutData;
import nextapp.echo2.extras.app.MenuBarPane;
import nextapp.echo2.extras.app.TabPane;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;
import nextapp.echo2.extras.app.menu.DefaultMenuModel;
import nextapp.echo2.extras.app.menu.DefaultOptionModel;
import nextapp.echo2.webcontainer.command.BrowserOpenWindowCommand;

import com.proyecto.core.modelo.echo.constantes.ParametrosIniciales;
import com.proyecto.core.servicios.ProcesarReporte;
import com.proyecto.core.vista.beans.TransaccionBean;
import com.proyecto.core.vista.echo.constantes.AccionVentana;
import com.proyecto.core.vista.echo.constantes.TipoMenu;
import com.proyecto.core.vista.echo.interfaces.ICPAreaClaves;

import consultas.echo2consultas.SpWindowPane;


public class WPTransaccionMultiple extends SpWindowPane {

	private static final long serialVersionUID = -1680046194308183877L;
	
	private boolean modoNuevo   = false;
	private boolean modoEdicion = false;
	
	private WPTransaccion wpPrincipal;
	
	private WPClaves 	  wpClaves;

	private ArrayList<TransaccionBean> lstTransaccion = new ArrayList<TransaccionBean>();

	private Button[] listaBotones;

	private ResourceBundle mensajeError;

	private ActionEvent    actionEventInterceptada;
	
	private ActionListener listenerWPTransaccion;
	
	protected ApplicationInstance aiTm = ApplicationInstance.getActive();
	
	private ActionListener listenerWPTransaccionNueva = new ActionListener() {
		private static final long serialVersionUID = 4074405311977943904L;
		public void actionPerformed(ActionEvent e) {
			actionEventInterceptada = e;
			ejecutarAccion(Integer.parseInt(actionEventInterceptada.getActionCommand()), true);
		}
	};

	
	private ActionListener listenerAceptarWPClaves = new ActionListener() {
		private static final long serialVersionUID = 3610623753219470132L;
		public void actionPerformed(ActionEvent ee) {
			if (wpClaves.getEsClaveAceptada()) {
				ejecutarAccion(Integer.parseInt(actionEventInterceptada
						.getActionCommand()), false);
				// listenerWPTransaccion.actionPerformed(actionEventInterceptada);
			}
		}
	};

	private String titulo = "Tablas de Apoyo";

	private ContentPane cpAreaTrabajo;

	private MenuBarPane menuBarPane1;

	private SplitPane splitPane1;

	private boolean expedienteTab = false;
	
	private TabPane tab = new TabPane();
	
	/**
	 * 
	 * CONSTRUCTOR DE PRUEBA DE KLITOS...
	 * 
	 */
	public WPTransaccionMultiple(String   pTitulo,
			 ICPAreaClaves pCPClave, ArrayList<TransaccionBean> pLstTransaccion, boolean tab) {
		super();
		this.expedienteTab = tab;
		initComponents();
		if (pCPClave != null) {
			wpClaves = new WPClaves(pCPClave);
		}
		if (pTitulo != null){
			titulo = pTitulo;
		}
		lstTransaccion = pLstTransaccion;
		inicializar();
	}
	
/**
 * Es el constructor para las ventanas expedientes.
 * @param pTitulo  			Es el titulo del expediente
 * @param pCPClave			Es el conten Pane de la ventana de busqueda.
 * @param pLstTransaccion	Es la lista de las secciones, incluyendo las tablas de apoyo.
 */
	public WPTransaccionMultiple(String   pTitulo,
								 ICPAreaClaves pCPClave,
            				     ArrayList<TransaccionBean> pLstTransaccion) {
		super();

		// Add design-time configured components.
		initComponents();
		if (pCPClave != null) {
			wpClaves = new WPClaves(pCPClave);
		}
		if (pTitulo != null){
			titulo = pTitulo;
		}
		lstTransaccion = pLstTransaccion;
		inicializar();
	}

	/**
	 * Constructor para las tablas de apoyo
	 * @param pTitulo           Es Titulo del expediente de apoyo
	 * @param pLstTransaccion	Es la lista de las secciones de apoyo.
	 */
		public WPTransaccionMultiple(String pTitulo,ArrayList<TransaccionBean> pLstTransaccion) {
		super();
		// Add design-time configured components.
		initComponents();
		if (pTitulo != null){
			titulo = pTitulo;
		}
		lstTransaccion = pLstTransaccion;
		inicializar();
	}

	private void inicializar() {
		
		this.setTitle(titulo);
		this.setMaximized(true);
		this.setStyleName("OpenLabs.SpWPVentanasExpedientes");

		splitPane1.remove(0);
		splitPane1.add(generarMenu(), 0);
		// configura la Transaccion Principal
		
		if (wpClaves != null && lstTransaccion.size() > 0 && lstTransaccion.get(0).getWpTransaccion() !=null) {
			int posic = this.expedienteTab?1:0;
			wpPrincipal = lstTransaccion.get(posic).getWpTransaccion();
			wpPrincipal.getAreaDatos().setEsPortada(true);
			//TODO  buscar el primero que no sea reporte
			if(!this.expedienteTab){
				wpPrincipal.setMaximized(true);
				wpPrincipal.setStyleName("DefaultSPWinPaneSinTitulo");
				//vico
				lstTransaccion.get(0).getWpTransaccion().setWpTransMultiple(this);
			}else{
				lstTransaccion.get(0).getWpTransaccion().setMaximized(true);
				lstTransaccion.get(0).getWpTransaccion().setStyleName("DefaultSPWinPaneSinTitulo");
			}
			
			//vico
			wpPrincipal.setWpTransMultiple(this);
			//wpPrincipal.getWpTransMultiple().lstTransaccion.get(0).getWpTransaccion().setWpTransMultiple(this);
			//lstTransaccion.get(0).getWpTransaccion().setWpTransMultiple(this);	
			configurarListener(posic);
			
			/**
			 * Prueba klitos
			 */
			
			if(!this.expedienteTab){
				cpAreaTrabajo.add(wpPrincipal);
				//by vico
				//lstTransaccion.get(0).getWpTransaccion().setWpTransMultiple(this);
			}else{
				cpAreaTrabajo.add(tab);
				for (int posicion = 0; posicion < lstTransaccion.size(); posicion++) {
					ContentPane cpTab = new ContentPane();
					
					tab.setStyleName("2OpenLabs.TabPane.Secciones");
					TabPaneLayoutData cpld = new TabPaneLayoutData();
					
					cpld.setTitle(lstTransaccion.get(posicion).getWpTransaccion().getTitle());
					cpTab.setLayoutData(cpld);
					cpTab.setStyleName("2OpenLabs.ContentPane.Tabs");
					
					tab.add(cpTab);	
					
					cpTab.add(lstTransaccion.get(posicion).getWpTransaccion());
					lstTransaccion.get(posicion).getWpTransaccion().setStyleName("2OpenLabs.SpWindowPane.WPTransaccion.Tab");
					lstTransaccion.get(posicion).getWpTransaccion().setWpTransMultiple(this);	
					if(posicion == 0){
						lstTransaccion.get(posicion).getWpTransaccion().getAreaLista().getGestionTabla().getTabla().getTabla().addActionListener(new ActionListener(){
							public void actionPerformed(ActionEvent e) {
								Object pojo = lstTransaccion.get(0).getWpTransaccion().getAreaLista().getGestionTabla().getTabla().ManejaEvento(e);
								wpClaves.setResultadoClaves(pojo);
								ejecutarAccionConsultar(false);
								tab.setActiveTabIndex(1);
							}
						});
					}
					if(posicion>1){
					
					}
				}
				//inhabilitar desde el la posicion 1 hasta la ultima
				
			}
			/**
			 * Fin Prueba klitos
			 */
			
			for (int posicion = 1; posicion < lstTransaccion.size(); posicion++) {
				/*if(posicion == 0){
					//by vico
					lstTransaccion.get(posicion).getWpTransaccion().setWpTransMultiple(this);	
				}*/
				if(expedienteTab && posicion == 1){
					posicion = posicion +1;
				}
				switch (lstTransaccion.get(posicion).getTipoVentana()) {
				case TipoMenu.SECCION:
					lstTransaccion.get(posicion).getWpTransaccion().activarAreas(false);
					lstTransaccion.get(posicion).getWpTransaccion().setWpTransMultiple(this);				
					break;
				case TipoMenu.REPORTE:
					break;
				case TipoMenu.REPORTE_2:
					break;
				case TipoMenu.EXPEDIENTE:
					break;
				case TipoMenu.PRINTFISCAL:
					break;
				case TipoMenu.SECCION2:
					lstTransaccion.get(posicion).getWpTransaccion().activarAreas(false);
					lstTransaccion.get(posicion).getWpTransaccion().setWpTransMultiple(this);	
				}//EoSW				
			}
			wpPrincipal.ejecutarAccion(AccionVentana.MODO_CANCELAR);
			wpPrincipal.ejecutarAccionMostrarVentana();
		}
	}
	
	public void ejecutarAccionMostrarAyuda(){
		aiTm.enqueueCommand(new BrowserOpenWindowCommand("ayudasOnline/"+wpPrincipal.getAreaDatos().getClass().getSimpleName()+"/"+wpPrincipal.getAreaDatos().getClass().getSimpleName()+".htm", "Ayuda", "width=1024,height=768"));
	}

	public void ejecutarAccion(Integer pAccion, Boolean pEsAntes) {
		switch (pAccion) {
		case AccionVentana.MODO_INCLUIR:
			ejecutarAccionIncluir(pEsAntes);
			break;
		case AccionVentana.MODO_MODIFICAR:
			ejecutarAccionModificar();
			break;
		case AccionVentana.MODO_MOSTRAR:
			ejecutarAccionMostrar();
			break;
		case AccionVentana.MODO_ELIMINAR:
			ejecutarAccionEliminar();
			break;
		case AccionVentana.MODO_CONSULTAR:
			ejecutarAccionConsultar(pEsAntes);
			break;
		case AccionVentana.MODO_ACEPTAR:
			ejecutarAccionAceptar();
			break;
		case AccionVentana.MODO_CANCELAR:
			ejecutarAccionCancelar();
			break;
		case AccionVentana.MODO_SALIR:
			ejecutarAccionSalir();
			break;
		case AccionVentana.MODO_INFO:
			ejecutarAccionMostrarAyuda();
			break;						
		default:
			break;
		}
	}

	private void ejecutarAccionIncluir(Boolean pEsAntes) {
		if (pEsAntes) {
			wpClaves.activar(AccionVentana.MODO_INCLUIR, cpAreaTrabajo);
			activarWP(wpPrincipal);
		} else {
			modoNuevo   = true;
			modoEdicion = true;
			// El primer metodo a ejecutar para el wpPrincipal () debe ser el
			// metodo "setObjetoDTOPadre"
			Object objetoPadre = wpClaves.getResultadoClaves();
			wpPrincipal.getAreaDatos().setObjetoDTOPadre(objetoPadre); // ojo ver comentario arriba
			wpPrincipal.ejecutarAccion(AccionVentana.MODO_INCLUIR);
			this.activarWP(wpPrincipal);
			WPTransaccion wpTransaccion = null;
			for (int posic = 1; posic < lstTransaccion.size(); posic++) {
				if(posic==1 && expedienteTab){
					posic = posic+1;
				}
				switch (lstTransaccion.get(posic).getTipoVentana()) {
				case TipoMenu.SECCION:
					wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
					wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre);
					if(wpTransaccion.getAreaLista()!=null){
						wpTransaccion.getAreaLista().setListaDatos(new ArrayList());
					}
					wpTransaccion.ejecutarAccion(AccionVentana.MODO_INCLUIR);
					//wpTransaccion.ejecutarAccion(AccionVentana.MODO_CANCELAR);
					if(!this.expedienteTab){
						cpAreaTrabajo.remove(wpTransaccion);
					}else if(this.expedienteTab){
						//no sabemos que conno hacer aki.. 
						((ContentPane)tab.getComponent(0)).remove(wpTransaccion);
					}
					
					wpTransaccion.activarAreas(false);
					break;
				case TipoMenu.REPORTE:
					break;
				case TipoMenu.EXPEDIENTE:
					break;
				case TipoMenu.PRINTFISCAL:
					break;
				case TipoMenu.SECCION2:
					wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
					wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre);
					if(wpTransaccion.getAreaLista()!=null){
						wpTransaccion.getAreaLista().setListaDatos(new ArrayList());
					}
					wpTransaccion.ejecutarAccion(AccionVentana.MODO_INCLUIR);
					//wpTransaccion.ejecutarAccion(AccionVentana.MODO_CANCELAR);
					if(!this.expedienteTab){
						cpAreaTrabajo.remove(wpTransaccion);
					}else if(this.expedienteTab){
						//no sabemos que conno hacer aki.. 
						((ContentPane)tab.getComponent(0)).remove(wpTransaccion);
					}
					
					wpTransaccion.activarAreas(false);
					break;
				}//EoSW	

			}
			this.setTituloExpediente();
			//wpPrincipal.areaDatos.rutinaAccionIncluir();
		}
	}

	private void ejecutarAccionModificar() {
		modoNuevo   = false;
		modoEdicion = true;
		wpPrincipal.ejecutarAccion(AccionVentana.MODO_MODIFICAR);
		for (int posic = 1; posic < lstTransaccion.size(); posic++) {
			if(expedienteTab && posic == 1){
				posic = posic +1;
			}
			switch (lstTransaccion.get(posic).getTipoVentana()) {
			case TipoMenu.SECCION:
				cpAreaTrabajo.remove(lstTransaccion.get(posic).getWpTransaccion());
				lstTransaccion.get(posic).getWpTransaccion().activarAreas(true);
				break;
			case TipoMenu.REPORTE:
				break;
			case TipoMenu.REPORTE_2:
				break;
			case TipoMenu.EXPEDIENTE:
				break;
			case TipoMenu.PRINTFISCAL:
				break;
			case TipoMenu.SECCION2:
				cpAreaTrabajo.remove(lstTransaccion.get(posic).getWpTransaccion());
				lstTransaccion.get(posic).getWpTransaccion().activarAreas(true);
				break;
			}//EoSW	
		}
		//Si la portada no usa AreaLista, WPTransaccion deshabilita el boton BtnNuevo por
		//eso hay que habilitarlo otra vez
		wpPrincipal.configurarBotones(AccionVentana.MODO_MODIFICAR);
	}

	private void ejecutarAccionMostrar() {
	}

	private void ejecutarAccionEliminar() {
		@SuppressWarnings("unused")
		String resultado = "";
		resultado = wpPrincipal.ejecutarAccion(AccionVentana.MODO_ELIMINAR);
		//if ("".equals(resultado)){ TODO: ver como sincronizar esto
			for (int posic = 1; posic < lstTransaccion.size(); posic++) {
				if(expedienteTab && posic == 1){
					posic = posic +1;
				}
				switch (lstTransaccion.get(posic).getTipoVentana()) {
				case TipoMenu.SECCION:
					lstTransaccion.get(posic).getWpTransaccion().ejecutarAccion(AccionVentana.MODO_CANCELAR);
					lstTransaccion.get(posic).getWpTransaccion().activarAreas(false);
					break;
				case TipoMenu.REPORTE:
					break;
				case TipoMenu.REPORTE_2:
					break;
				case TipoMenu.EXPEDIENTE:
					break;
				case TipoMenu.PRINTFISCAL:
					break;
				case TipoMenu.SECCION2:
					lstTransaccion.get(posic).getWpTransaccion().ejecutarAccion(AccionVentana.MODO_CANCELAR);
					lstTransaccion.get(posic).getWpTransaccion().activarAreas(false);
					break;
				}//EoSW	
			}
		//}
	}

	private void ejecutarAccionConsultar(Boolean pEsAntes) {
		if (pEsAntes) {
			wpClaves.activar(AccionVentana.MODO_CONSULTAR, cpAreaTrabajo);
			//wpClaves.catalogoVisible(true);	
			activarWP(wpPrincipal);
		} else {
			modoNuevo   = false;
			modoEdicion = false;
			// El primer metodo a ejecutar para el wpPrincipal (lstTransaccion.get(0).getWpTransaccion())
			// debe ser el m�todo "setObjetoDTOPadre"
			Object objetoPadre = wpClaves.getResultadoClaves();
			WPTransaccion wpTransaccion = null;
			for (int posic = 0; posic < lstTransaccion.size(); posic++) {
				switch (lstTransaccion.get(posic).getTipoVentana()) {
				case TipoMenu.SECCION:
					wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
					wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre); // ojo ver comentario arriba
					wpTransaccion.activarAreas(true);
					wpTransaccion.ejecutarAccion(AccionVentana.MODO_CONSULTAR);		
					if(wpTransaccion.getAreaLista()!=null && wpTransaccion.getAreaDatos().getMuestraTabla() &&
							wpTransaccion.getAreaLista().getListaDatos()!=null && wpTransaccion.getAreaLista().getListaDatos().size()>0){
						wpTransaccion.getAreaLista().setObjetoDTO(wpTransaccion.getAreaLista().getListaDatos().get(0));
						wpTransaccion.ejecutarAccion(AccionVentana.MODO_MOSTRAR);
					}
					break;
				case TipoMenu.REPORTE:
					break;
				case TipoMenu.REPORTE_2:
					break;
				case TipoMenu.EXPEDIENTE:
					break;
				case TipoMenu.PRINTFISCAL:
					break;
				case TipoMenu.SECCION2:
					wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
					wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre); // ojo ver comentario arriba
					wpTransaccion.activarAreas(true);
					wpTransaccion.ejecutarAccion(AccionVentana.MODO_CONSULTAR);		
					if(wpTransaccion.getAreaLista()!=null && wpTransaccion.getAreaDatos().getMuestraTabla() &&
							wpTransaccion.getAreaLista().getListaDatos()!=null && wpTransaccion.getAreaLista().getListaDatos().size()>0){
						wpTransaccion.getAreaLista().setObjetoDTO(wpTransaccion.getAreaLista().getListaDatos().get(0));
						wpTransaccion.ejecutarAccion(AccionVentana.MODO_MOSTRAR);
					}
					break;
				}//EoSW	
			}
			wpPrincipal.configurarBotones(AccionVentana.MODO_MOSTRAR);
			this.setTituloExpediente();
		}
		getApplicationInstance();
		
	}

	private void ejecutarAccionAceptar() {
		String resultado = "";
		resultado = wpPrincipal.ejecutarAccion(AccionVentana.MODO_ACEPTAR);
		wpPrincipal.configurarBotones(AccionVentana.MODO_MODIFICAR);
		if (/*modoNuevo && */ "".equals(resultado)) {
			Object objetoPadre = (Object) wpPrincipal.getAreaDatos().getObjetoDTO(); 
			//Object objetoPadre = wpClaves.getResultadoClaves();
			WPTransaccion wpTransaccion = null;
			for (int posic = 0; posic < lstTransaccion.size(); posic++) {
				switch (lstTransaccion.get(posic).getTipoVentana()) {
				case TipoMenu.SECCION:
					wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
					wpTransaccion.activarAreas(true);
					wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre);
					wpTransaccion.ejecutarAccion(AccionVentana.MODO_CANCELAR);
					/**Just to proove*/
					if(wpTransaccion.getAreaLista()!=null && wpTransaccion.getAreaDatos().getMuestraTabla() &&
							wpTransaccion.getAreaLista().getListaDatos()!=null && wpTransaccion.getAreaLista().getListaDatos().size()>0){
						wpTransaccion.getAreaLista().setObjetoDTO(wpTransaccion.getAreaLista().getListaDatos().get(0));
						wpTransaccion.ejecutarAccion(AccionVentana.MODO_MOSTRAR);
					}
					
					break;
				case TipoMenu.REPORTE:
					break;
				case TipoMenu.REPORTE_2:
					break;
				case TipoMenu.EXPEDIENTE:
					break;
				case TipoMenu.PRINTFISCAL:
					break;
				case TipoMenu.SECCION2:
					wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
					wpTransaccion.activarAreas(true);
					wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre);
					wpTransaccion.ejecutarAccion(AccionVentana.MODO_CANCELAR);
					/**Just to proove*/
					if(wpTransaccion.getAreaLista()!=null && wpTransaccion.getAreaDatos().getMuestraTabla() &&
							wpTransaccion.getAreaLista().getListaDatos()!=null && wpTransaccion.getAreaLista().getListaDatos().size()>0){
						wpTransaccion.getAreaLista().setObjetoDTO(wpTransaccion.getAreaLista().getListaDatos().get(0));
						wpTransaccion.ejecutarAccion(AccionVentana.MODO_MOSTRAR);
					}
					
					break;
				}//EoSW					

			}
			this.setTituloExpediente();
		}
		if ("".equals(resultado)) {
			modoNuevo   = false;
			modoEdicion = true;
		}
	}

	private void ejecutarAccionCancelar() {
		wpPrincipal.ejecutarAccion(AccionVentana.MODO_CANCELAR);
		if (modoEdicion && modoNuevo){
			wpPrincipal.configurarBotones(AccionVentana.MODO_CANCELAR);			
		}else if (modoEdicion){
			wpPrincipal.configurarBotones(AccionVentana.MODO_MOSTRAR);
		}
		this.setTituloExpediente();
		WPTransaccion wptransaccion = null;
		for (int posic = 1; posic < lstTransaccion.size(); posic++) {
			if(expedienteTab && posic == 1){
				posic = posic +1;
			}
			switch (lstTransaccion.get(posic).getTipoVentana()) {
			case TipoMenu.SECCION:
				wptransaccion = lstTransaccion.get(posic).getWpTransaccion();
				wptransaccion.ejecutarAccion(AccionVentana.MODO_CANCELAR);
				cpAreaTrabajo.remove(wptransaccion);
				if (modoEdicion && modoNuevo){
					wptransaccion.activarAreas(false);
				}
				break;
			case TipoMenu.REPORTE:
				break;
			case TipoMenu.REPORTE_2:
				break;
			case TipoMenu.EXPEDIENTE:
				break;
			case TipoMenu.PRINTFISCAL:
				break;
			case TipoMenu.SECCION2:
				wptransaccion = lstTransaccion.get(posic).getWpTransaccion();
				wptransaccion.ejecutarAccion(AccionVentana.MODO_CANCELAR);
				cpAreaTrabajo.remove(wptransaccion);
				if (modoEdicion && modoNuevo){
					wptransaccion.activarAreas(false);
				}
				break;
			}//EoSW
		}
	}

	public void ejecutarAccionSalir() {
		String sale = wpPrincipal .ejecutarAccion(AccionVentana.MODO_SALIR);
		if(sale.equals("SI")){
			this.getParent().remove(this);	
		}else{
			
		}
		
	}

	public void SincronizarDTOPadre(){
		Object objetoPadre = (Object) wpPrincipal.getAreaDatos().getObjetoDTO();
		WPTransaccion wpTransaccion = null;
		for (int posic = 1; posic < lstTransaccion.size(); posic++) {
			if(expedienteTab && posic == 1){
				posic = posic +1;
			}
			switch (lstTransaccion.get(posic).getTipoVentana()) {
			case TipoMenu.SECCION:
				wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
				wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre);
				break;
			case TipoMenu.REPORTE:
				break;
			case TipoMenu.REPORTE_2:
				break;
			case TipoMenu.EXPEDIENTE:
				break;
			case TipoMenu.PRINTFISCAL:
				break;
			case TipoMenu.SECCION2:
				wpTransaccion = lstTransaccion.get(posic).getWpTransaccion();
				wpTransaccion.getAreaDatos().setObjetoDTOPadre(objetoPadre);
				break;
			}					
		}
	}
	
	private void configurarListener(int pPosic) {
		
		listaBotones = lstTransaccion.get(pPosic).getWpTransaccion().getRImecBotonera().ObtenerBotones();
		for (int i = 0; i < listaBotones.length; i++) {
			if (listaBotones[i].hasActionListeners()) {
				listenerWPTransaccion = (ActionListener) lstTransaccion.get(pPosic).getWpTransaccion().getListenerBotonera();
				listaBotones[i].removeActionListener(listenerWPTransaccion);
				listaBotones[i].addActionListener(listenerWPTransaccionNueva);
				
				
			}
		}
		if(expedienteTab){
			listaBotones = lstTransaccion.get(0).getWpTransaccion().getRImecBotonera().ObtenerBotones();
			for (int i = 0; i < listaBotones.length; i++) {
				if (listaBotones[i].hasActionListeners()) {
					listenerWPTransaccion = (ActionListener) lstTransaccion.get(0).getWpTransaccion().getListenerBotonera();
					listaBotones[i].removeActionListener(listenerWPTransaccion);
					listaBotones[i].addActionListener(listenerWPT0);
				}
			}
		}
		wpClaves.getRwBotoneraAceptarCancelar().getBtnAceptar()
				.addActionListener(listenerAceptarWPClaves);
	}
	
	private ActionListener listenerWPT0 = new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			tab.setActiveTabIndex(1);
			actionEventInterceptada = e;
			ejecutarAccion(Integer.parseInt(actionEventInterceptada.getActionCommand()), true);
		}
	};

	private MenuBarPane generarMenu() {
		DefaultMenuModel dm = new DefaultMenuModel("1", titulo);
		DefaultMenuModel dm3 = new DefaultMenuModel("2", titulo);
		DefaultMenuModel dm2 = new DefaultMenuModel("3", "Reportes");
		MenuBarPane menuBarPane = new MenuBarPane();
		menuBarPane.setStyleName("OpenLabs.MenuBarPane.VentanasExpedientes");

		String idItem;
		String descripcionItem;
		Integer inicio = 0;
		if (wpClaves != null) {
			inicio = 1;
		}
		for (int posic = inicio; posic < lstTransaccion.size(); posic++) {
			idItem = String.valueOf(posic);
			descripcionItem = lstTransaccion.get(posic).getIdDescripcion();
			
			switch (lstTransaccion.get(posic).getTipoVentana()) {
			case TipoMenu.SECCION:
				if(lstTransaccion.get(posic).isMostrarOpcionEnMenu()){
					dm.addItem(new DefaultOptionModel(idItem, descripcionItem, null));
				}else {
					//No se muestra la opcion en el menu
				}
				break;
			case TipoMenu.REPORTE:
				dm2.addItem(new DefaultOptionModel(idItem, descripcionItem, null));
				break;
			case TipoMenu.REPORTE_2:
				dm2.addItem(new DefaultOptionModel(idItem, descripcionItem, null));
				break;
			case TipoMenu.EXPEDIENTE:
				break;
			case TipoMenu.SEPARADOR:
				dm.addItem(new DefaultOptionModel(idItem, "_________________", null));
				break;				
			case TipoMenu.SEPARADOR_REPORTE:
				dm2.addItem(new DefaultOptionModel(idItem, "_________________", null));		
				break;		
			case TipoMenu.PRINTFISCAL:
				dm2.addItem(new DefaultOptionModel(idItem, descripcionItem, null));
				break;	
			case TipoMenu.SECCION2:
				if(lstTransaccion.get(posic).isMostrarOpcionEnMenu()){
					dm3.addItem(new DefaultOptionModel(idItem, descripcionItem, null));
				}else {
					//No se muestra la opcion en el menu
				}
				break;
			case TipoMenu.SEPARADOR_SECCION2:
				dm3.addItem(new DefaultOptionModel(idItem, "_________________", null));	
				break;
			}	
		}//EoF...
		
		if (dm.getItemCount() > 0){
			((DefaultMenuModel) menuBarPane.getModel()).addItem(dm);
		}
		if (dm3.getItemCount() > 0){
			((DefaultMenuModel) menuBarPane.getModel()).addItem(dm3);
		}
		if (dm2.getItemCount() > 0){
			((DefaultMenuModel) menuBarPane.getModel()).addItem(dm2);
		}
		
		
		menuBarPane.addActionListener(new ActionListener() {
			private static final long serialVersionUID = 6692959853930366606L;

			public void actionPerformed(ActionEvent arg0) {
				Integer posic = Integer.parseInt(arg0.getActionCommand());
				Object wpObj = cpAreaTrabajo.getComponent(arg0.getActionCommand());
					switch (lstTransaccion.get(posic).getTipoVentana()) {
					case TipoMenu.SECCION:
						if (wpObj == null) {

							if((wpClaves==null || wpClaves.getResultadoClaves()!=null 
									|| "S".equalsIgnoreCase(ParametrosIniciales.MOSTRAR_SECCION_AL_COMIENZO))){
								lstTransaccion.get(posic).getWpTransaccion().ejecutarAccionMostrarVentana();
								if(!expedienteTab){
									cpAreaTrabajo.add(lstTransaccion.get(posic).getWpTransaccion());
								}else{
									tab.setActiveTabIndex(posic);
								}
							}
							
						}else{
							((WPTransaccion)wpObj).ejecutarAccionMostrarVentana();
							activarWP(wpObj);
						}
						break;
					case TipoMenu.REPORTE:
							Object objDto = null;
							if (wpPrincipal !=null){
								objDto = wpPrincipal.getAreaDatos().getObjetoDTO();
							}
							lstTransaccion.get(posic).getProcesoReporte().imprimirReporte(objDto,aiTm, cpAreaTrabajo);
						break;
					case TipoMenu.REPORTE_2:
						objDto = null;
						if (wpPrincipal !=null){
							objDto = wpPrincipal.getAreaDatos().getObjetoDTO();
						}
						if(null!=lstTransaccion.get(posic).getCpReporte()){
//							new ProcesarReporte(lstTransaccion.get(posic).getNombreReporte(),lstTransaccion.get(posic).getCpReporte());
							cpAreaTrabajo.add(new WPReporteGenerico(lstTransaccion.get(posic).getCpReporte(),lstTransaccion.get(posic).getNombreReporte()));
						}else{
							new ProcesarReporte(lstTransaccion.get(posic).getNombreReporte(),null!=wpPrincipal?wpPrincipal.getAreaDatos().getObjetoDTO():null);
						}
//						lstTransaccion.get(posic).getProcesoReporte().imprimirReporte(objDto,aiTm, cpAreaTrabajo);
					break;
					case TipoMenu.PRINTFISCAL:
						Object objDto2 = null;
						if (wpPrincipal !=null){
							objDto2 = wpPrincipal.getAreaDatos().getObjetoDTO();
						}
						lstTransaccion.get(posic).getProcesarImpresoraFiscal().imprimirDatosImpresoraFiscal(objDto2,aiTm, cpAreaTrabajo);
					break;					
					case TipoMenu.EXPEDIENTE:
						break;
					case TipoMenu.SECCION2:
						if (wpObj == null) {

							if((wpClaves==null || wpClaves.getResultadoClaves()!=null 
									|| "S".equalsIgnoreCase(ParametrosIniciales.MOSTRAR_SECCION_AL_COMIENZO))){
								lstTransaccion.get(posic).getWpTransaccion().ejecutarAccionMostrarVentana();
								if(!expedienteTab){
									cpAreaTrabajo.add(lstTransaccion.get(posic).getWpTransaccion());
								}else{
									tab.setActiveTabIndex(posic);
								}
							}
							
						}else{
							((WPTransaccion)wpObj).ejecutarAccionMostrarVentana();
							activarWP(wpObj);
						}
						break;
					}//EoSW
			}
		});

		return menuBarPane;
	}

	public void setMenuTitulo(Integer pPosic, String pTexto) {
		try {
			MenuBarPane a = (MenuBarPane) splitPane1.getComponent(0);		
			if ( a.getModel().getItemCount()!=0){
				((DefaultMenuModel) a.getModel().getItem(pPosic)).setText(pTexto);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("setMenuTitulo:: " + e.getMessage());
		}
		
	}

	private void activarWP(Object pWP) {
		if(!this.expedienteTab){
			cpAreaTrabajo.remove((Component) pWP);
			cpAreaTrabajo.add((Component) pWP);
		}else if(this.expedienteTab){
			tab.getComponent(1).remove((Component)pWP);
			tab.getComponent(1).add((Component)pWP);
			((WPTransaccion)pWP).setMaximized(true);
		}
	}

	public void setTituloExpediente() {
		String detalle = wpPrincipal.areaDatos.getTituloVentanaExpediente().trim();
		if (detalle.length() > 0) {
			this.setTitle(detalle + " / " + titulo);
		}else{
			this.setTitle(titulo);
		}
	}
	
	public TransaccionBean obtenerTransaccionBean(String cpTransaccionNombre){
		for (int posic = 0; posic < lstTransaccion.size(); posic++) {
			switch (lstTransaccion.get(posic).getTipoVentana()) {
			case TipoMenu.SECCION:
				if (cpTransaccionNombre.equals(lstTransaccion.get(posic).getBeanAreaDatos())){
					return lstTransaccion.get(posic);
				}
				break;
			case TipoMenu.REPORTE:
				break;
			case TipoMenu.REPORTE_2:
				break;
			case TipoMenu.EXPEDIENTE:
				if (cpTransaccionNombre.equals(lstTransaccion.get(posic).getBeanAreaDatos())){
					return lstTransaccion.get(posic);
				}
				break;
			case TipoMenu.SECCION2:
				if (cpTransaccionNombre.equals(lstTransaccion.get(posic).getBeanAreaDatos())){
					return lstTransaccion.get(posic);
				}
				break;
			}//EoSC 
		}//EoF
		return null;
	}//EoM
	 
	public TransaccionBean obtenerTransaccionBean(Integer cpTransaccionPosic){
		TransaccionBean tb = null;
		
		if (cpTransaccionPosic <= lstTransaccion.size()) {
		tb = lstTransaccion.get(cpTransaccionPosic);
		}
		return tb;
	}
	
	/**
	 * @return the cpAreaTrabajo
	 */
	public ContentPane getCpAreaTrabajo() {
		return cpAreaTrabajo;
	}

	public ResourceBundle getMensajeError() {
		return mensajeError;
	}

	public void setMensajeError(ResourceBundle mensajeError) {
		this.mensajeError = mensajeError;
	}

	public ActionListener getListenerWPTransaccionNueva() {
		return listenerWPTransaccionNueva;
	}

	public void setListenerWPTransaccionNueva(
			ActionListener listenerWPTransaccionNueva) {
		this.listenerWPTransaccionNueva = listenerWPTransaccionNueva;
	}

	public boolean isExpedienteTab() {
		return expedienteTab;
	}

	public void setExpedienteTab(boolean expedienteTab) {
		this.expedienteTab = expedienteTab;
	}

	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		splitPane1 = new SplitPane();
		splitPane1.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		splitPane1.setSeparatorPosition(new Extent(20, Extent.PX));
		add(splitPane1);
		menuBarPane1 = new MenuBarPane();
		menuBarPane1.setStyleName("OpenLabs.MenuBarPane.VentanasExpedientes");
		splitPane1.add(menuBarPane1);
		cpAreaTrabajo = new ContentPane();
		SplitPaneLayoutData cpAreaTrabajoLayoutData = new SplitPaneLayoutData();
		cpAreaTrabajoLayoutData.setOverflow(SplitPaneLayoutData.OVERFLOW_AUTO);
		cpAreaTrabajo.setLayoutData(cpAreaTrabajoLayoutData);
		splitPane1.add(cpAreaTrabajo);
	}

}